var runtime.work

294 uses

	runtime (current package)
		metrics.go#L748: 	a.cpuStats = work.cpuStats
		mgc.go#L196: 	work.startSema = 1
		mgc.go#L197: 	work.markDoneSema = 1
		mgc.go#L198: 	work.spanSPMCs.list.init(unsafe.Offsetof(spanSPMC{}.allnode))
		mgc.go#L199: 	lockInit(&work.sweepWaiters.lock, lockRankSweepWaiters)
		mgc.go#L200: 	lockInit(&work.assistQueue.lock, lockRankAssistQueue)
		mgc.go#L201: 	lockInit(&work.strongFromWeak.lock, lockRankStrongFromWeakQueue)
		mgc.go#L202: 	lockInit(&work.wbufSpans.lock, lockRankWbufSpans)
		mgc.go#L203: 	lockInit(&work.spanSPMCs.lock, lockRankSpanSPMCs)
		mgc.go#L325: var work workType
		mgc.go#L549: 	n := work.cycles.Load()
		mgc.go#L564: 	for work.cycles.Load() == n+1 && sweepone() != ^uintptr(0) {
		mgc.go#L579: 	for work.cycles.Load() == n+1 && !isSweepDone() {
		mgc.go#L587: 	cycle := work.cycles.Load()
		mgc.go#L600: 	work.goroutineLeak.pending.Store(true)
		mgc.go#L638: 	for work.goroutineLeak.pending.Load() {
		mgc.go#L648: 		lock(&work.sweepWaiters.lock)
		mgc.go#L649: 		nMarks := work.cycles.Load()
		mgc.go#L656: 			unlock(&work.sweepWaiters.lock)
		mgc.go#L662: 		work.sweepWaiters.list.push(getg())
		mgc.go#L663: 		goparkunlock(&work.sweepWaiters.lock, waitReasonWaitForGCCycle, traceBlockUntilGCEnds, 1)
		mgc.go#L722: 		return int32(t.n-work.cycles.Load()) > 0
		mgc.go#L772: 	semacquire(&work.startSema)
		mgc.go#L775: 		semrelease(&work.startSema)
		mgc.go#L796: 	work.userForced = trigger.kind == gcTriggerCycle
		mgc.go#L821: 	work.stwprocs, work.maxprocs = gomaxprocs, gomaxprocs
		mgc.go#L822: 	if work.stwprocs > numCPUStartup {
		mgc.go#L825: 		work.stwprocs = numCPUStartup
		mgc.go#L827: 	work.heap0 = gcController.heapLive.Load()
		mgc.go#L828: 	work.pauseNS = 0
		mgc.go#L829: 	work.mode = mode
		mgc.go#L832: 	work.tSweepTerm = now
		mgc.go#L839: 	work.cpuStats.accumulateGCPauseTime(stw.stoppingCPUTime, 1)
		mgc.go#L859: 	work.cycles.Add(1)
		mgc.go#L876: 	if work.goroutineLeak.pending.Load() {
		mgc.go#L877: 		work.goroutineLeak.enabled = true
		mgc.go#L878: 		work.goroutineLeak.pending.Store(false)
		mgc.go#L926: 	work.cpuStats.accumulateGCPauseTime(nanotime()-stw.finishedStopping, work.maxprocs)
		mgc.go#L931: 		work.pauseNS += now - stw.startedStopping
		mgc.go#L932: 		work.tMark = now
		mgc.go#L951: 	semrelease(&work.startSema)
		mgc.go#L1000: 	semacquire(&work.markDoneSema)
		mgc.go#L1010: 		semrelease(&work.markDoneSema)
		mgc.go#L1020: 	work.strongFromWeak.block = true
		mgc.go#L1062: 	work.tMarkTerm = now
		mgc.go#L1073: 	work.cpuStats.accumulateGCPauseTime(stw.stoppingCPUTime, 1)
		mgc.go#L1097: 	if restart || (work.goroutineLeak.enabled && !work.goroutineLeak.done) {
		mgc.go#L1106: 			work.goroutineLeak.done = findGoroutineLeaks()
		mgc.go#L1112: 			work.cpuStats.accumulateGCPauseTime(nanotime()-stw.finishedStopping, work.maxprocs)
		mgc.go#L1116: 			work.pauseNS += now - stw.startedStopping
		mgc.go#L1137: 	work.strongFromWeak.block = false
		mgc.go#L1143: 	semrelease(&work.markDoneSema)
		mgc.go#L1205: 	oldRootJobs := work.markrootJobs.Load()
		mgc.go#L1211: 	var vIndex, ivIndex int = work.nMaybeRunnableStackRoots, work.nStackRoots
		mgc.go#L1214: 		if work.stackRoots[vIndex].isMaybeRunnable() {
		mgc.go#L1219: 			if gp := work.stackRoots[ivIndex]; gp.isMaybeRunnable() {
		mgc.go#L1220: 				work.stackRoots[ivIndex] = work.stackRoots[vIndex]
		mgc.go#L1221: 				work.stackRoots[vIndex] = gp
		mgc.go#L1228: 	newRootJobs := work.baseStacks + uint32(vIndex)
		mgc.go#L1230: 		work.nMaybeRunnableStackRoots = vIndex
		mgc.go#L1231: 		work.markrootJobs.Store(newRootJobs)
		mgc.go#L1284: 	if work.nMaybeRunnableStackRoots == work.nStackRoots {
		mgc.go#L1296: 	work.goroutineLeak.count = work.nStackRoots - work.nMaybeRunnableStackRoots
		mgc.go#L1298: 	for i := work.nMaybeRunnableStackRoots; i < work.nStackRoots; i++ {
		mgc.go#L1299: 		gp := work.stackRoots[i]
		mgc.go#L1353: 	work.markrootJobs.Add(int32(work.nStackRoots - work.nMaybeRunnableStackRoots))
		mgc.go#L1354: 	work.nMaybeRunnableStackRoots = work.nStackRoots
		mgc.go#L1364: 	work.heap1 = gcController.heapLive.Load()
		mgc.go#L1394: 		work.heap2 = work.bytesMarked
		mgc.go#L1404: 		stwSwept = gcSweep(work.mode)
		mgc.go#L1434: 	work.pauseNS += now - stw.startedStopping
		mgc.go#L1435: 	work.tEnd = now
		mgc.go#L1438: 	memstats.pause_ns[memstats.numgc%uint32(len(memstats.pause_ns))] = uint64(work.pauseNS)
		mgc.go#L1440: 	memstats.pause_total_ns += uint64(work.pauseNS)
		mgc.go#L1450: 	work.cpuStats.accumulateGCPauseTime(now-stw.finishedStopping, work.maxprocs)
		mgc.go#L1451: 	work.cpuStats.accumulate(now, true)
		mgc.go#L1455: 	memstats.gc_cpu_fraction = float64(work.cpuStats.GCTotalTime-work.cpuStats.GCIdleTime) / float64(work.cpuStats.TotalTime)
		mgc.go#L1467: 	if work.userForced {
		mgc.go#L1472: 	lock(&work.sweepWaiters.lock)
		mgc.go#L1474: 	injectglist(&work.sweepWaiters.list)
		mgc.go#L1475: 	unlock(&work.sweepWaiters.lock)
		mgc.go#L1510: 	if work.goroutineLeak.enabled {
		mgc.go#L1518: 		work.goroutineLeak.enabled = false
		mgc.go#L1519: 		goroutineLeakDone = work.goroutineLeak.done
		mgc.go#L1520: 		work.goroutineLeak.done = false
		mgc.go#L1594: 			" @", string(itoaDiv(sbuf[:], uint64(work.tSweepTerm-runtimeInitTime)/1e6, 3)), "s ",
		mgc.go#L1600: 		prev := work.tSweepTerm
		mgc.go#L1601: 		for i, ns := range []int64{work.tMark, work.tMarkTerm, work.tEnd} {
		mgc.go#L1610: 			int64(work.stwprocs) * (work.tMark - work.tSweepTerm),
		mgc.go#L1614: 			int64(work.stwprocs) * (work.tEnd - work.tMarkTerm),
		mgc.go#L1625: 			work.heap0>>20, "->", work.heap1>>20, "->", work.heap2>>20, " MB, ",
		mgc.go#L1629: 			work.maxprocs, " P")
		mgc.go#L1630: 		if work.userForced {
		mgc.go#L1741: 	work.nproc = ^uint32(0)
		mgc.go#L1742: 	work.nwait = ^uint32(0)
		mgc.go#L1944: 	return work.nwait == work.nproc && !gcMarkWorkAvailable()
		mgc.go#L1950: 	decnwait := atomic.Xadd(&work.nwait, -1)
		mgc.go#L1951: 	if decnwait == work.nproc {
		mgc.go#L1952: 		println("runtime: work.nwait=", decnwait, "work.nproc=", work.nproc)
		mgc.go#L1961: 	incnwait := atomic.Xadd(&work.nwait, +1)
		mgc.go#L1962: 	if incnwait > work.nproc {
		mgc.go#L1963: 		println("runtime: work.nwait=", incnwait, "work.nproc=", work.nproc)
		mgc.go#L1966: 	return incnwait == work.nproc && !gcMarkWorkAvailable()
		mgc.go#L1976: 	work.tstart = startTime
		mgc.go#L1979: 	if next, jobs := work.markrootNext.Load(), work.markrootJobs.Load(); work.full != 0 || next < jobs {
		mgc.go#L1980: 		print("runtime: full=", hex(work.full), " next=", next, " jobs=", jobs, " nDataRoots=", work.nDataRoots, " nBSSRoots=", work.nBSSRoots, " nSpanRoots=", work.nSpanRoots, " nStackRoots=", work.nStackRoots, "\n")
		mgc.go#L1993: 	work.stackRoots = nil
		mgc.go#L2054: 	gcController.resetLive(work.bytesMarked)
		mgc.go#L2147: 	work.bytesMarked = 0
		mgc.go#L2148: 	work.initialHeapLive = gcController.heapLive.Load()
		mgcmark.go#L117: 	work.nDataRoots = 0
		mgcmark.go#L118: 	work.nBSSRoots = 0
		mgcmark.go#L123: 		if nDataRoots > work.nDataRoots {
		mgcmark.go#L124: 			work.nDataRoots = nDataRoots
		mgcmark.go#L128: 		if nBSSRoots > work.nBSSRoots {
		mgcmark.go#L129: 			work.nBSSRoots = nBSSRoots
		mgcmark.go#L146: 	work.nSpanRoots = len(mheap_.markArenas) * (pagesPerArena / pagesPerSpanRoot)
		mgcmark.go#L154: 	if work.goroutineLeak.enabled {
		mgcmark.go#L157: 		work.stackRoots, work.nMaybeRunnableStackRoots = allGsSnapshotSortedForGC()
		mgcmark.go#L160: 		work.stackRoots = allGsSnapshot()
		mgcmark.go#L161: 		work.nMaybeRunnableStackRoots = len(work.stackRoots)
		mgcmark.go#L164: 	work.nStackRoots = len(work.stackRoots)
		mgcmark.go#L166: 	work.markrootNext.Store(0)
		mgcmark.go#L167: 	work.markrootJobs.Store(uint32(fixedRootCount + work.nDataRoots + work.nBSSRoots + work.nSpanRoots + work.nMaybeRunnableStackRoots))
		mgcmark.go#L170: 	work.baseData = uint32(fixedRootCount)
		mgcmark.go#L171: 	work.baseBSS = work.baseData + uint32(work.nDataRoots)
		mgcmark.go#L172: 	work.baseSpans = work.baseBSS + uint32(work.nBSSRoots)
		mgcmark.go#L173: 	work.baseStacks = work.baseSpans + uint32(work.nSpanRoots)
		mgcmark.go#L174: 	work.baseEnd = work.baseStacks + uint32(work.nStackRoots)
		mgcmark.go#L180: 	if next, jobs := work.markrootNext.Load(), work.markrootJobs.Load(); next < jobs {
		mgcmark.go#L192: 		if i >= work.nStackRoots {
		mgcmark.go#L226: 	case work.baseData <= i && i < work.baseBSS:
		mgcmark.go#L229: 			workDone += markrootBlock(datap.data, datap.edata-datap.data, datap.gcdatamask.bytedata, gcw, int(i-work.baseData))
		mgcmark.go#L232: 	case work.baseBSS <= i && i < work.baseSpans:
		mgcmark.go#L235: 			workDone += markrootBlock(datap.bss, datap.ebss-datap.bss, datap.gcbssmask.bytedata, gcw, int(i-work.baseBSS))
		mgcmark.go#L257: 	case work.baseSpans <= i && i < work.baseStacks:
		mgcmark.go#L259: 		markrootSpans(gcw, int(i-work.baseSpans))
		mgcmark.go#L264: 		if i < work.baseStacks || work.baseEnd <= i {
		mgcmark.go#L266: 			print("runtime: markroot index ", i, " not in stack roots range [", work.baseStacks, ", ", work.baseEnd, ")\n")
		mgcmark.go#L269: 		gp := work.stackRoots[i-work.baseStacks]
		mgcmark.go#L275: 			gp.waitsince = work.tstart
		mgcmark.go#L785: 	lock(&work.assistQueue.lock)
		mgcmark.go#L786: 	list := work.assistQueue.q.popList()
		mgcmark.go#L788: 	unlock(&work.assistQueue.lock)
		mgcmark.go#L796: 	lock(&work.assistQueue.lock)
		mgcmark.go#L801: 		unlock(&work.assistQueue.lock)
		mgcmark.go#L806: 	oldList := work.assistQueue.q
		mgcmark.go#L807: 	work.assistQueue.q.pushBack(gp)
		mgcmark.go#L814: 		work.assistQueue.q = oldList
		mgcmark.go#L818: 		unlock(&work.assistQueue.lock)
		mgcmark.go#L822: 	goparkunlock(&work.assistQueue.lock, waitReasonGCAssistWait, traceBlockGCMarkAssist, 2)
		mgcmark.go#L837: 	if work.assistQueue.q.empty() {
		mgcmark.go#L849: 	lock(&work.assistQueue.lock)
		mgcmark.go#L850: 	for !work.assistQueue.q.empty() && scanBytes > 0 {
		mgcmark.go#L851: 		gp := work.assistQueue.q.pop()
		mgcmark.go#L873: 			work.assistQueue.q.pushBack(gp)
		mgcmark.go#L884: 	unlock(&work.assistQueue.lock)
		mgcmark.go#L1206: 	if !work.goroutineLeak.enabled {
		mgcmark.go#L1208: 		job := work.markrootNext.Add(1) - 1
		mgcmark.go#L1209: 		return job, job < work.markrootJobs.Load()
		mgcmark.go#L1213: 	for next, jobs := work.markrootNext.Load(), work.markrootJobs.Load(); next < jobs; next = work.markrootNext.Load() {
		mgcmark.go#L1215: 		if work.markrootNext.CompareAndSwap(next, next+1) {
		mgcmark.go#L1281: 	if work.markrootNext.Load() < work.markrootJobs.Load() {
		mgcmark.go#L1320: 		if work.full == 0 {
		mgcmark.go#L1420: 		if work.full == 0 {
		mgcmark.go#L1438: 								if work.markrootNext.Load() < work.markrootJobs.Load() {
		mgcmark_greenteagc.go#L305: 				if !work.spanqMask.read(uint32(gcw.id)) {
		mgcmark_greenteagc.go#L306: 					work.spanqMask.set(gcw.id)
		mgcmark_greenteagc.go#L332: 	if work.spanqMask.read(uint32(w.id)) {
		mgcmark_greenteagc.go#L333: 		work.spanqMask.clear(w.id)
		mgcmark_greenteagc.go#L636: 	lock(&work.spanSPMCs.lock)
		mgcmark_greenteagc.go#L640: 		work.spanSPMCs.list.remove(unsafe.Pointer(r))
		mgcmark_greenteagc.go#L649: 	unlock(&work.spanSPMCs.lock)
		mgcmark_greenteagc.go#L709: 	lock(&work.spanSPMCs.lock)
		mgcmark_greenteagc.go#L711: 	work.spanSPMCs.list.push(unsafe.Pointer(r))
		mgcmark_greenteagc.go#L712: 	unlock(&work.spanSPMCs.lock)
		mgcmark_greenteagc.go#L775: 	lock(&work.spanSPMCs.lock)
		mgcmark_greenteagc.go#L776: 	if gcphase != _GCoff || work.spanSPMCs.list.empty() {
		mgcmark_greenteagc.go#L777: 		unlock(&work.spanSPMCs.lock)
		mgcmark_greenteagc.go#L780: 	r := (*spanSPMC)(work.spanSPMCs.list.head())
		mgcmark_greenteagc.go#L785: 			work.spanSPMCs.list.remove(unsafe.Pointer(r))
		mgcmark_greenteagc.go#L791: 	unlock(&work.spanSPMCs.lock)
		mgcmark_greenteagc.go#L801: 		if !work.spanqMask.read(enum.position()) {
		mgcmark_greenteagc.go#L818: 		work.spanqMask.clear(int32(enum.position()))
		mgcmark_greenteagc.go#L1166: 	if !work.full.empty() {
		mgcmark_greenteagc.go#L1169: 	if work.markrootNext.Load() < work.markrootJobs.Load() {
		mgcmark_greenteagc.go#L1172: 	if work.spanqMask.any() {
		mgcpacer.go#L463: 			work.initialHeapLive>>20, "->",
		mgcpacer.go#L1362: 		gcWaitOnMark(work.cycles.Load())
		mgcwork.go#L164: 	lockWithRankMayAcquire(&work.wbufSpans.lock, lockRankWbufSpans)
		mgcwork.go#L335: 		work.spanqMask.set(w.id)
		mgcwork.go#L343: 		atomic.Xadd64(&work.bytesMarked, int64(w.bytesMarked))
		mgcwork.go#L426: 	if work.empty != 0 {
		mgcwork.go#L427: 		b = (*workbuf)(work.empty.pop())
		mgcwork.go#L434: 	lockWithRankMayAcquire(&work.wbufSpans.lock, lockRankWbufSpans)
		mgcwork.go#L439: 		if work.wbufSpans.free.first != nil {
		mgcwork.go#L440: 			lock(&work.wbufSpans.lock)
		mgcwork.go#L441: 			s = work.wbufSpans.free.first
		mgcwork.go#L443: 				work.wbufSpans.free.remove(s)
		mgcwork.go#L444: 				work.wbufSpans.busy.insert(s)
		mgcwork.go#L446: 			unlock(&work.wbufSpans.lock)
		mgcwork.go#L456: 			lock(&work.wbufSpans.lock)
		mgcwork.go#L457: 			work.wbufSpans.busy.insert(s)
		mgcwork.go#L458: 			unlock(&work.wbufSpans.lock)
		mgcwork.go#L482: 	work.empty.push(&b.node)
		mgcwork.go#L492: 	work.full.push(&b.node)
		mgcwork.go#L500: 	b := (*workbuf)(work.full.pop())
		mgcwork.go#L526: 	lock(&work.wbufSpans.lock)
		mgcwork.go#L527: 	if work.full != 0 {
		mgcwork.go#L533: 	work.empty = 0
		mgcwork.go#L534: 	work.wbufSpans.free.takeAll(&work.wbufSpans.busy)
		mgcwork.go#L535: 	unlock(&work.wbufSpans.lock)
		mgcwork.go#L542: 	lock(&work.wbufSpans.lock)
		mgcwork.go#L543: 	if gcphase != _GCoff || work.wbufSpans.free.isEmpty() {
		mgcwork.go#L544: 		unlock(&work.wbufSpans.lock)
		mgcwork.go#L550: 			span := work.wbufSpans.free.first
		mgcwork.go#L554: 			work.wbufSpans.free.remove(span)
		mgcwork.go#L558: 	more := !work.wbufSpans.free.isEmpty()
		mgcwork.go#L559: 	unlock(&work.wbufSpans.lock)
		mheap.go#L2414: 	if work.strongFromWeak.block {
		mheap.go#L2476: 	for work.strongFromWeak.block {
		mheap.go#L2477: 		lock(&work.strongFromWeak.lock)
		mheap.go#L2481: 		work.strongFromWeak.q.pushBack(getg())
		mheap.go#L2484: 		goparkunlock(&work.strongFromWeak.lock, waitReasonGCWeakToStrongWait, traceBlockGCWeakToStrongWait, 2)
		mheap.go#L2500: 	lock(&work.strongFromWeak.lock)
		mheap.go#L2501: 	list := work.strongFromWeak.q.popList()
		mheap.go#L2503: 	unlock(&work.strongFromWeak.lock)
		mprof.go#L1312: 		return work.goroutineLeak.count, false
		mprof.go#L1318: 	n = work.goroutineLeak.count
		proc.go#L5772: 	return work.goroutineLeak.count
		proc.go#L6119: 		work.spanqMask = work.spanqMask.resize(nprocs)
		proc.go#L6184: 		work.spanqMask = work.spanqMask.resize(nprocs)